package demo;

import java.util.LinkedList;
import java.util.Queue;

public class MyStack {
    private Queue<Integer> qu1;
    private Queue<Integer> qu2;
    public MyStack(){
        qu1=new LinkedList<>();
        qu2=new LinkedList<>();
    }
    public void push(int data){
        if(!qu1.isEmpty()){
            qu1.offer(data);
        }else if(!qu2.isEmpty()){
            qu2.offer(data);
        }else{
            qu1.offer(data);
        }
    }
    public int pop(){
        if(empty()){
            //两个队列都为空，表示栈为空
        }
        if(!qu1.isEmpty()){
            //qu1.size是会变化的，自动变化，这里的i++就没有必要了
            //解决方法：1.i不++，直接让这个每次弹出去一个的值来减小1起作用，
            //用一个定量的值保存初始值
            for(int i=0;i<qu1.size()-1;){
                qu2.offer(qu1.poll());
            }
            return qu1.poll();
        }else{
            for(int i=0;i<qu2.size()-1;){
                qu1.offer(qu2.poll());
            }
            return qu2.poll();
        }
    }
    public int top(){
        if(empty()){
            //两个队列都为空，表示栈为空
        }
        int tmp=-1;
        if(!qu1.isEmpty()){
            //qu1.size是会变化的，自动变化，这里的i++就没有必要了
            //解决方法：1.i不++，直接让这个每次弹出去一个的值来减小1起作用，
            //用一个定量的值保存初始值
            for(int i=0;i<qu1.size();i++){

                qu2.offer(tmp=qu1.poll());
                //这里有很多的其他的写法，你自己看咯，
//                你去想的多了自然写的方法就很多
                
            }
            return tmp;
        }else{
            for(int i=0;i<qu2.size();i++){
                qu1.offer(tmp=qu2.poll());
                //这里可以叠在一起吗？
            }
            return tmp;
        }
    }
    public boolean empty(){
        return qu1.isEmpty()&&qu2.isEmpty();
    }

}
